﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using APILocawebGateway.REDECARD;
using APILocawebGateway.HTMLHelper;
namespace APILocawebGateway.REDECARD
{
    public sealed class HTMLHelperREDECARD
    {
        /// <summary>
        /// Este método cria o form básico segundo a configuração REDECARD
        /// </summary>
        /// <param name="configuracaoREDECARD"></param>
        /// <param name="quantidadeParcelas"></param>
        /// <param name="tipoJuros"></param>
        /// <param name="numeroOrdem"></param>
        /// <param name="preco"></param>
        /// <param name="bandeira"></param>
        /// <returns></returns>
        private static Form MontarFormBasico(ConfiguracaoREDECARD configuracaoREDECARD, Int32 quantidadeParcelas, ITipoJuros tipoJuros, String numeroOrdem, Decimal preco, String bandeira)
        {
            String quantidadeParcelasAsString = quantidadeParcelas.ToString();
            for (int i = quantidadeParcelasAsString.Length; quantidadeParcelasAsString.Length < 2; i++)
                quantidadeParcelasAsString = "0" + quantidadeParcelasAsString;

            Form form = new Form(Configuracao.URLCOMPONENTELOCAWEB, "POST", "frmREDECARD");
            form.AddControl(new InputHidden("identificacao", configuracaoREDECARD.Identificacao));
            form.AddControl(new InputHidden("ambiente", configuracaoREDECARD.Ambiente.ToString()));
            form.AddControl(new InputHidden("modulo", Modulos.REDECARD));
            form.AddControl(new InputHidden("operacao", "Pagamento"));
            form.AddControl(new InputHidden("bandeira", bandeira));
            form.AddControl(new InputHidden("pedido", numeroOrdem));
            form.AddControl(new InputHidden("valor", UtilidadesREDECARD.FormataMoedaParaFormREDECARD(preco)));
            form.AddControl(new InputHidden("parcelas", quantidadeParcelasAsString));
            form.AddControl(new InputHidden("juros", Convert.ToString(tipoJuros.ToString())));

            if (bandeira == Bandeiras.MASTERCARD)
                form.AddControl(new InputHidden("PAX1", "MASTERCARD"));
            else
                form.AddControl(new InputHidden("PAX1", "DINERS"));

            return form;
        }

        /// <summary>
        /// Este método retorna a string do form  MasterCard básico
        /// </summary>
        /// <param name="configuracaoREDECARD">objeto do tipo ConfiguracaoREDECARD</param>
        /// <param name="quantidadeParcelas">Quantidade de parcelas</param>
        /// <param name="tipoJuros">Constante definida em APILocawebGateway.REDECARD.TipoJuros</param>
        /// <param name="numeroOrdem">número interno para controle da operação</param>
        /// <param name="preco">Valor Decimal que representa o preço</param>
        /// <returns></returns>
        public static String RenderizarFormMastercard(ConfiguracaoREDECARD configuracaoREDECARD, Int32 quantidadeParcelas, ITipoJuros tipoJuros, String numeroOrdem, Decimal preco)
        {
            return MontarFormBasico(configuracaoREDECARD, quantidadeParcelas, tipoJuros, numeroOrdem, preco, Bandeiras.MASTERCARD).Render();
        }

        /// <summary>
        /// Este método retorna a string do form MasterCard avançado, exibindo uma imagem
        /// </summary>
        /// <param name="configuracaoREDECARD">objeto do tipo ConfiguracaoREDECARD</param>
        /// <param name="quantidadeParcelas">Quantidade de parcelas</param>
        /// <param name="tipoJuros">Constante definida em APILocawebGateway.REDECARD.TipoJuros</param>
        /// <param name="numeroOrdem">número interno para controle da operação</param>
        /// <param name="preco">Valor Decimal que representa o preço</param>
        /// <param name="imagePath">Caminho da logo Mastercard que será renderizada</param>
        /// <returns></returns>
        public static String RenderizarFormMastercard(ConfiguracaoREDECARD configuracaoREDECARD, Int32 quantidadeParcelas, ITipoJuros tipoJuros, String numeroOrdem, Decimal preco, String imagePath)
        {
            var form = MontarFormBasico(configuracaoREDECARD, quantidadeParcelas, tipoJuros, numeroOrdem, preco, Bandeiras.MASTERCARD);
            form.AddControl(new PaymentMethodImage("imgMasterCard", imagePath, 100, 75));
            return form.Render();
        }

        /// <summary>
        /// Este método retorna a string do form  Diners básico
        /// </summary>
        /// <param name="configuracaoREDECARD">objeto do tipo ConfiguracaoREDECARD</param>
        /// <param name="quantidadeParcelas">Quantidade de parcelas</param>
        /// <param name="tipoJuros">Constante definida em APILocawebGateway.REDECARD.TipoJuros</param>
        /// <param name="numeroOrdem">número interno para controle da operação</param>
        /// <param name="preco">Valor Decimal que representa o preço</param>
        /// <returns></returns>
        public static String RenderizarFormDiners(ConfiguracaoREDECARD configuracaoREDECARD, Int32 quantidadeParcelas, ITipoJuros tipoJuros, String numeroOrdem, Decimal preco)
        {
            return MontarFormBasico(configuracaoREDECARD, quantidadeParcelas, tipoJuros, numeroOrdem, preco, Bandeiras.DINERS).Render();
        }

        /// <summary>
        /// Este método retorna a string do form MasterCard avançado, exibindo uma imagem
        /// </summary>
        /// <param name="configuracaoREDECARD">objeto do tipo ConfiguracaoREDECARD</param>
        /// <param name="quantidadeParcelas">Quantidade de parcelas</param>
        /// <param name="tipoJuros">Constante definida em APILocawebGateway.REDECARD.TipoJuros</param>
        /// <param name="numeroOrdem">número interno para controle da operação</param>
        /// <param name="preco">Valor Decimal que representa o preço</param>
        /// <param name="imagePath">Caminho da logo Mastercard que será renderizada</param>
        /// <returns></returns>
        public static String RenderizarFormDiners(ConfiguracaoREDECARD configuracaoREDECARD, Int32 quantidadeParcelas, ITipoJuros tipoJuros, String numeroOrdem, Decimal preco, String imagePath)
        {
            var form = MontarFormBasico(configuracaoREDECARD, quantidadeParcelas, tipoJuros, numeroOrdem, preco, Bandeiras.DINERS);
            form.AddControl(new PaymentMethodImage("imgDiners", imagePath, 100, 75));
            return form.Render();
        }

    }
}
